/*
 * @Description: 和Java交互接口
 * @Date: 2022-02-21 14:27:30
 * @Author: yeming
 */

// js输出给java数据

const isNewBrowser = true

/**
 * @desc: 地图类型2d、3d切换
 * @param {String} type 地图类型 2d 3d db
 * @return {*}
 * @use: 使用示例
 */
function sendMapTypeToJava (type) {
  if (window.jbrowser !== undefined) window.jbrowser.js2Gs_MapType(type)
}

/**
 * @desc: 地图模式
 * @param {Number} mapMode 
 * @param {Number} sessionId 当前操作对象的sessionId（时间戳）
 * @return {*}
 * @use: 使用示例
 */
function sendMapModeToJava (mapMode, sessionId) {
  if (window.jbrowser !== undefined) window.jbrowser.js2Gs_MapMode(mapMode, sessionId)
}

/**
 * @desc: 航线类型
 * @param {Number} lineType
 * @param {Number} sessionId 当前操作航线的sessionId（时间戳）
 * @return {*}
 * @use: 使用示例
 */
function sendlineTypeToJava (lineType, sessionId) {
  if (window.jbrowser !== undefined) window.jbrowser.js2Gs_LineType(lineType, sessionId)
}

/**
 * @desc: 鼠标左键单击击地图，返回地图模式和经纬度
 * @param {Number} mapMode
 * @param {Array} latlng
 * @param {Number} clickType 1-append 2-insert
 * @return {*}
 * @use: 使用示例
 */
function sendLatlngFromLeftMouseClickToJava (mapMode, latlng, clickType) {
  if (!window.jbrowser) return false

  if (isNewBrowser) {
    var lat3d = '{"longitude":' + latlng[0] + ', "latitude":' + latlng[1] + ', "altitude":' + latlng[2] + '}'
    window.jbrowser.js2Gs_LatlngFromLeftMouseClick(mapMode, lat3d, clickType)
  } else window.jbrowser.js2Gs_LatlngFromLeftMouseClick(mapMode, latlng, clickType)
}

/**
 * @desc: 鼠标右键点击地图，返回地图模式和经纬度
 * @param {Number} mapMode 地图模式
 * @param {Array} latlng 经纬度
 * @param {Number} type 鼠标悬停类型 0:非任何点 1-悬停在航点 2-悬停于其他点
 * @param {Array} position 屏幕坐标 [x, y] 如：[100, 100] 相对于左上角
 * @param {Object} pointData 点信息
 * @return {*}
 * @use: 使用示例
 */
function sendLatlngFromRightMouseClickToJava (mapMode, latlng, type, position, pointData) {
  if (!window.jbrowser) return false

  if (isNewBrowser) {
    var lat3d = '{"longitude":' + latlng[0] + ', "latitude":' + latlng[1] + ', "altitude":' + latlng[2] + '}'
    var positions = '{"x":' + position[0] + ', "y":' + position[1] + '}'
    window.jbrowser.js2Gs_LatlngFromRightMouseClick(mapMode, lat3d, type, positions, JSON.stringify(pointData))
  } else window.jbrowser.js2Gs_LatlngFromRightMouseClick(mapMode, latlng, type, position, pointData)
}

/**
 * @desc: 鼠标左键双击地图，返回地图模式和经纬度
 * @param {Number} mapMode
 * @param {Array} latlng
 * @return {*}
 * @use: 使用示例
 */
function sendLatlngFromLeftMouseDoubleClickToJava (mapMode, latlng) {
  if (!window.jbrowser) return false

  if (isNewBrowser) {
    var lat3d = '{"longitude":' + latlng[0] + ', "latitude":' + latlng[1] + ', "altitude":' + latlng[2] + '}'
    window.jbrowser.js2Gs_LatlngFromLeftMouseDoubleClick(mapMode, lat3d)
  } else window.jbrowser.js2Gs_LatlngFromLeftMouseDoubleClick(mapMode, latlng)
}

/**
 * @desc: 鼠标划动，返回地图模式和经纬度
 * @param {Number} mapMode
 * @param {Array} latlng
 * @return {*}
 * @use: 使用示例
 */
function sendLatlngFromMouseMoveToJava (mapMode, latlng) {
  if (!window.jbrowser) return false

  if (!isNewBrowser) window.jbrowser.js2Gs_LatlngFromMouseMove(mapMode, latlng)
  else {
    var lat3d = '{"longitude":' + latlng[0] + ', "latitude":' + latlng[1] + ', "altitude":' + latlng[2] + '}'
    window.jbrowser.js2Gs_LatlngFromMouseMove(mapMode, lat3d)
  }
}

/**
 * @desc: 点拖动开始
 * @param {Number} mapMode
 * @param {Object} data
 * id 当前点id
 * type 当前点类型 1-任务 2-降落
 * index 当前点索引
 * isHove 当前点是否盘旋
 * radius 当前点半径
 * isEdit 当前点是否可编辑
 * parentId 父级哈希 Map id（航线sessionId）
 * parentType 父级哈希 Map 类型（航线类型 1-单线飞行）
 * @return {*}
 * @use: 使用示例
 */
function sendDataFromTranslateStartToJava (mapMode, data) {
  if (window.jbrowser !== undefined) window.jbrowser.js2Gs_TranslateStart(mapMode, data)
}

/**
 * @desc: 点拖动过程中
 * @param {Number} mapMode
 * @param {Object} data
 * id 当前点id
 * type 当前点类型 1-任务 2-降落
 * index 当前点索引
 * isHove 当前点是否盘旋
 * radius 当前点半径
 * isEdit 当前点是否可编辑
 * parentId 父级哈希 Map id（航线sessionId）
 * parentType 父级哈希 Map 类型（航线类型 1-单线飞行）
 * @return {*}
 * @use: 使用示例
 */
function sendDataFromTranslatingToJava (mapMode, data) {
  if (window.jbrowser !== undefined) window.jbrowser.js2Gs_Translating(mapMode, data)
}

/**
 * @desc: 点拖动结束
 * @param {Number} mapMode
 * @param {Object} data
 * id 当前点id
 * type 当前点类型 1-任务 2-降落
 * index 当前点索引
 * isHove 当前点是否盘旋
 * radius 当前点半径
 * isEdit 当前点是否可编辑
 * parentId 父级哈希 Map id（航线sessionId）
 * parentType 父级哈希 Map 类型（航线类型 1-单线飞行）
 * @use: 使用示例
 */
function sendDataFromTranslateEndToJava (mapMode, data) {
  if (window.jbrowser !== undefined) window.jbrowser.js2Gs_TranslateEnd(mapMode, data)
}


/**
 * @desc: 缩放地图，返回地图缩放比例
 * @param {Number} zoom
 * @param {Array} latlng 地图中心点经纬度
 * @return {*}
 * @use: 使用示例
 */
function sendMapCenterAndZoomToJava (latlng, zoom) {
  if (!window.jbrowser) return false

  if (isNewBrowser) {
    var lat3d = '{"longitude":' + latlng[0] + ', "latitude":' + latlng[1] + ', "altitude":' + latlng[2] + '}'
    window.jbrowser.js2Gs_MapCenterAndZoom(lat3d, zoom)
  } else window.jbrowser.js2Gs_MapCenterAndZoom(latlng, zoom)
}

/**
 * @desc: 打点成功（可省略，直接在方法中返回）
 * @param {*}
 * @return {Object}
 * @use: 使用示例
 */
// 打点成功
function sendAddPointSuccess (point) {
  if (window.jbrowser !== undefined) window.jbrowser.js2Gs_AddPointSuccess(point)
}

// 删除点成功
function sendDelPointSuccess (sessionId) {
  if (window.jbrowser !== undefined) window.jbrowser.js2Gs_DelPointSuccess(point)
}


// 绘制对象类型类型 点线面
function sendDrawTypeToJava (drawType, customType) {
  if (window.jbrowser !== undefined) window.jbrowser.js2Gs_DrawType(drawType, customType)
}

// java输出给js数据

/**
 * @desc: 通过地图模式来获取鼠标操作提示
 * @param {String} key 和java对应的地图操作提示对照表的key
 * @return {*}
 * @use: 使用示例
 */
function getMapModeTipsFromJava (key) {
  if (window.jbrowser !== undefined) window.jbrowser.gs2Js_MapModeTipsFromJava(key)
}

export {
  sendMapTypeToJava,
  sendMapModeToJava,
  sendDrawTypeToJava,
  sendLatlngFromLeftMouseClickToJava,
  sendLatlngFromRightMouseClickToJava,
  sendLatlngFromLeftMouseDoubleClickToJava,
  sendLatlngFromMouseMoveToJava,
  sendDataFromTranslateStartToJava,
  sendDataFromTranslatingToJava,
  sendDataFromTranslateEndToJava,
  sendMapCenterAndZoomToJava,
  sendAddPointSuccess,
  sendDelPointSuccess,
  getMapModeTipsFromJava
}
